#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
int n, m, q, len, sum;
set<int> pos;
int main()
{
cin >> n >> m >> len >> q;
pos.insert(0);
pos.insert(n + 1);
// cantidad de barcos máximos que entran en el tablero
sum = (n + 1) / (len + 1);
for (int i = 1; i <= q; ++i)
{
int x, l, r;
cin >> x;
// Si la bala actual ya existe, continua a la siguiente iteracion
if (pos.find(x) != pos.end())
continue;
// Se obtiene la posicion de la bala mas cercana por encima de la actual
auto it = pos.upper_bound(x);
// Se obtiene la posicion de la bala mas cercana por debajo de la actual
l = *prev(it);
r = *it;
// Restamos a la cantidad de barcos maximos los barcos que entran fuera de los lugares donde cayeron las balas
sum -= (r - l) / (len + 1);
// Sumamos la cantidad de barcos que entran en el rango entre la bala minima - actual y bala actual - maxima
sum += (x - l) / (len + 1) + (r - x) / (len + 1);
// Insertamos la posicion de la bala actual, se usa set en caso se dispare a la misma posicion varias veces
pos.insert(x);
// Si sum es menor que la cantidad de barcos maximos que deberian entrar en el tablero, se hizo trampa
if (sum < m)
{
cout << i << '\n';
return 0;
}
}
// No se hizo trampa
cout << "-1\n";
return 0;
}
1566B - MIN-MEX Cut | 678C - Joty and Chocolate |
1352E - Special Elements | 1520E - Arranging The Sheep |
1157E - Minimum Array | 1661D - Progressions Covering |
262A - Roma and Lucky Numbers | 1634B - Fortune Telling |
1358A - Park Lighting | 253C - Text Editor |
365B - The Fibonacci Segment | 75A - Life Without Zeros |
1519A - Red and Blue Beans | 466A - Cheap Travel |
659E - New Reform | 1385B - Restore the Permutation by Merger |
706A - Beru-taxi | 686A - Free Ice Cream |
1358D - The Best Vacation | 1620B - Triangles on a Rectangle |
999C - Alphabetic Removals | 1634C - OKEA |
1368C - Even Picture | 1505F - Math |
1473A - Replacing Elements | 959A - Mahmoud and Ehab and the even-odd game |
78B - Easter Eggs | 1455B - Jumps |
1225C - p-binary | 1525D - Armchairs |